using System;
using System.Collections.Generic;

namespace Dida
{
	/// <summary>
	/// This interface is like a bridge to allow geometry
	/// to use debug drawing, without having a circular assemly dependency
	/// with Diagnostics.
	/// If you're not in the Geometry module, just use the normal
	/// DebugDrawContext directly.
	/// </summary>
	/// <internal/>
	public interface IGeometryDebugDraw
	{
		/// <summary>
		/// Wraps the DebugDraw.PushWorldMatrix method.
		/// </summary>
		/// <internal/>
		void PushWorldMatrix(Matrix4 mat);
		/// <summary>
		/// Wraps the DebugDraw.PopWorldMatrix method.
		/// </summary>
		/// <internal/>
		void PopWorldMatrix();
		/// <summary>
		/// Wraps the DebugDraw.DrawLine method.
		/// </summary>
		/// <internal/>
		void DrawLine(Vector3D start, Vector3D end, UInt32 colour);
		/// <summary>
		/// Wraps the DebugDraw.DrawBox method.
		/// </summary>
		/// <internal/>
		void DrawBox(Box box, UInt32 colour);
		/// <summary>
		/// Wraps the DebugDraw.DrawLocator method.
		/// </summary>
		/// <internal/>
		void DrawLocator(Vector3D pos, float size, UInt32 colour);
	}

	/// <summary>
	/// This interface is like a bridge to make geometry be able
	/// to use debug drawing, without having a circular assemly dependency
	/// with Diagnostics.
	/// If you're not in the Geometry module, just use the normal
	/// DebugMesh directly.
	/// </summary>
	/// <internal/>
	public interface IGeometryDebugMesh
	{
		/// <summary>
		/// Wraps the DebugMesh.AddTriangle method.
		/// </summary>
		void AddTriangle(Vector3D v1, Vector3D v2, Vector3D v3);
	}
}
